#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# main.py
# Copyright (C) 2012 Leonardo Tada <leonardo****>
# 

import pygtk
pygtk.require('2.0')
#usando gtk2 como gtk3, basta mudar a biblioteca.
import gtk as Gtk
import sys


#Comment the first line and uncomment the second before installing
#or making the tarball (alternatively, use project variables)
UI_FILE = "gui.ui"
#UI_FILE = "/usr/local/share/pygtkteste/ui/pygtkteste.ui"


class Main:
	def __init__(self, bd):
		self.bd = bd
		self.builder = Gtk.Builder()
		self.builder.add_from_file(UI_FILE)
		self.builder.connect_signals(self)
		
		window = self.builder.get_object('window1')
		self.labelTotal = self.builder.get_object('labelTotal')
		self.entry = self.builder.get_object('entryProduto')
		self.liststoreProd = self.builder.get_object('liststoreProd')
		self.liststoreListaProd = self.builder.get_object('liststoreListaProd')
		self.treeviewP = self.builder.get_object('treeviewP')
		self.spinQuant = self.builder.get_object('spinQuant')
		self.entryPreco = self.builder.get_object('entryPreco')
		self.buttonAdd = self.builder.get_object('buttonAdd')
		self.entryProduto = self.builder.get_object('entryProduto')
		#pesquisa combobox
		self.completion = Gtk.EntryCompletion()
		self.completion.set_model(self.liststoreProd)
		self.completion.set_minimum_key_length(1)
		self.completion.set_text_column(0)
		self.completion.set_inline_selection(False)
		self.completion.set_match_func(self.match_func)
		self.entry.set_completion(self.completion)
		
		window.show_all()
		window.connect('destroy', lambda w: Gtk.main_quit())
		
		#variaveis
		self.listp = {}
		#self.i = 0 #eh 0 primeiro item da lista.
		self.totalTudo = 0.0

		
		
	def on_entry1_changed(self, entry):
		#pesquisa e guarda resultado.
		self.liststoreProd.clear()
		self.listp.clear()
		texto = entry.get_text()
		try:
			texto = int(texto)
			resul = self.bd.LerCodigo(texto)
			self.listp[resul[0]] = {'codigo':resul[0], 'codigoDistrib':resul[1],
			'descricao':resul[2], 'uf':resul[3], 'quantEmb':resul[4],
			'precoCusto':resul[5], 'precoVenda':resul[6]}
			self.numero = True
			print(self.listp)
			#coloca o preco no campo preco automaticamente
			try: self.entryPreco.set_text(str(self.listp[texto]['precoVenda']))
			except: pass
		except:
			resultado = self.bd.LerNome(entry.get_text())
			#print resultado
			for row in resultado:
				#Guarda no dicionario
				self.listp[row[2]] = {'codigo':row[0], 'codigoDistrib':row[1],
				'descricao':row[2], 'uf':row[3], 'quantEmb':row[4],
				'precoCusto':row[5], 'precoVenda':float(row[5])*1.0} #preco de venda
				#Insere descricao na lista autocompletar
				self.liststoreProd.append([row[2]])
			self.numero = False
			#print(self.listp)
			self.completion.set_popup_completion(True)
			#coloca o preco no campo preco automaticamente
			try: self.entryPreco.set_text(str(self.listp[texto]['precoVenda']))
			except: pass
		
		
	# Return true for any completion containing the key
	def match_func(self, completion, key_string, iter):
		return True
	
	def on_buttonAdd_clicked(self, botao):
		texto = self.entry.get_text()
		if texto != '':
			if self.numero == False:
				try:
					p = self.listp[texto] #resumi o nome do dicionario
					qt = self.spinQuant.get_value()
					preco = self.entryPreco.get_text()
					preco = preco.replace(',','.')
					preco = round(float(preco),2) #arredonda
					total = preco*qt
					#retorna string com 2 casas decimais
					preco = '%.2f' % preco
					total = '%.2f' % total
					self.liststoreListaProd.append([p['codigo'], p['codigoDistrib'],
					p['descricao'], p['uf'], p['quantEmb'], qt, p['precoCusto'],
					preco, total])
					#guarda e calcula total
					print(total)#
					total = float(total)
					self.totalTudo += total
					self.calculaTotal()
				except: print('nao existe')
			else:
				try:
					texto = int(texto)
					p = self.listp[texto] #resumi o nome do dicionario
					qt = self.spinQuant.get_value()
					preco = self.entryPreco.get_text()
					preco = preco.replace(',','.')
					preco = round(float(preco),2) #arredonda
					total = preco*qt
					#retorna string com 2 casas decimais
					preco = '%.2f' % preco
					total = '%.2f' % total
					self.liststoreListaProd.append([p['codigo'], p['codigoDistrib'],
					p['descricao'], p['uf'], p['quantEmb'], qt, p['precoCusto'],
					preco, total])
					#guarda e calcula total
					total = float(total)
					self.totalTudo += total
					self.calculaTotal()
				except: print('nao existe')		
		else: print('nada')
		self.limpaCampos()
		
	def limpaCampos(self):
		self.spinQuant.set_value(1)
		self.entryPreco.set_text('')
		self.entryProduto.set_text('')
		self.entryProduto.grab_focus()
		
	def delItem(self, widget, event):
		#keyname = Gtk.gdk.keyval_name(event.keyval)
		if (event.keyval == 65535):	#equivalente a tecla Delete
			selection = self.treeviewP.get_selection()
			linha = selection.get_selected_rows()
			linha = linha[1][0][0]
			model, iter, = selection.get_selected()
			#retira valor do total
			#fazer arredondar!
			self.totalTudo -= float(model[linha][8])
			if iter:
				path = model.get_path(iter)
				model.remove(iter)
				selection.select_path(path)
				if not selection.path_is_selected(path):
					row = path[0]-1
					if row >= 0:
						selection.select_path((row,))
			#temp calcula total
			self.calculaTotal()
			
	def on_concluir_clicked(self, botao):
		produtos = []
		model = self.liststoreListaProd
		#no codigo retira o .0 no final
		for item in model:
			produtos.append({'codigo': item[1], 'descricao': item[2],
			'quantidade': item[5], 'uf': item[3], 'preco': float(item[7]),
			'total': float(item[8])})
		from report import Report
		Re = Report(produtos)
		#Re.PDF()
		Re.Texto()
		
	def calculaTotal(self):
		self.labelTotal.set_text('Total:'+str(round(self.totalTudo,2)))
	def on_entryProduto_activate(self, entry):
		self.spinQuant.grab_focus()
	def on_spinQuant_activate(self, spin):
		self.entryPreco.grab_focus()
	def on_entryPreco_activate(self, entry):
		self.buttonAdd.grab_focus()

	def destroy(window, self):
		Gtk.main_quit()

def main():
	from bancodedados import Bancodedados
	import login
	bd = Bancodedados()
	login.GUI(Gtk)
	app = Main(bd)
	Gtk.main()
		
if __name__ == "__main__":
	sys.exit(main())
